/*
 * @Author: gxx
 * @QQ:1278255275
 * @Date: 2021-04-07 14:08:21
 * @Last Modified by: gxx
 * @Last Modified time: 2021-04-07 14:08:21
 * @Description: Flood Fill算法详解
*/

#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>

using namespace std;

int[][] floodfill(int[][] image,int sr,int sc,int newColor){
    int origColor = image[sr][sc];
    fill(image,sr,sc,origColor,newColor);
    return image
;}


void fill(int[][] image,int x,int y, int origColor, int newColor){
    if(inArea(image,x,y))return ;
    if(image[x][y] != origColor)return ;
    image[x][y] = newColor;
    fill(image,x,y-1,origColor,newColor);
    fill(image,x,y+1,origColor,newColor);
    fill(image,x-1,y,origColor,newColor);
    fill(image,x+1,y,origColor,newColor);
}

bool inArea(int[][] image,int x,int y){
    return x>= 0 && x < image.length && y>= 0 && y < image[0].length;
}

void filll(int [][] image, int x,int y, int origColor,int newColor){
    if(!inArea(image,x,y))return ;

    if(image[x][y]!= origColor) return ;

    if(image[x][y] == -1) return ;

    image[x][y] = -1;
    fill(image,x,y-1,origColor,newColor);
    fill(image,x,y+1,origColor,newColor);
    fill(image,x-1,y,origColor,newColor);
    fill(image,x+1,y,origColor,newColor);
    image[x][y] = newColor;
}

int fill(int [][] image, int x, int y,int origColor, int newColor){
    if(!inArea(imagex,y)) return 0;
    if(visited[x][y]) return 1;

    if(image[x][y] != origColor) return 0;

    visted[x][y] = true;
    int surround = \
    fill(image,x-1,y,origColor,newColor) + \
    fill(image,x+1,y,origColor,newColor) + \
    fill(image,x,y-1,origColor,newColor) + \
    fill(image,x,y+1,origColor,newColor);

    if(surroound < 4)
    image[x][y] = newColor;

    return 1;
}


//二维矩阵 /图 框架构建
/*

void fill(int x, int y){
    fill (x-1,y);
    fill (x+1,y);
    fill (x,y-1);
    fill (x,y+1);
}
*/
//类比于四叉树

